git status
git add teach.sh 提交到暂存区
git config -h 帮助 {
    -local  用户级
    -system 系统级 
    -global 项目级
    }
git config --local user.name "test"
git config --local user.email "test@xx.com"

Git 全局设置:
git config --global user.name "chidanta"
git config --global user.email "2065911284@qq.com"

创建 git 仓库:
git remote add origin https://gitee.com/woyongyuanxihuangaomutongxue/NULL.git
git push -u origin "master"

#分支管理 (主要 git branch)
    git init -b dev #新建dev分支
    git branch  #查看版本库分支 有时直接输无输出 需要 add commit 到版本库
    *dev #代表当前分支
    git branch cs #创建cs分支
    git branch -m cs abc #修改分支名
    git branch -M xxx 将当前分支重命名为 xxx 若已有xxx则直接覆盖很危险
    git branch -d abc #删除分支 d删除已合并为合并无法删除 -D强制删除
#切换分支
    git checkout abc
#合并分支
    git merge <被合并分支> #此时所在分支为主分支
#作为主分支(也就是重命名为main分支)
    git branch -m xxx main
#组合 创建并切换
    git checkout -b 新分支

#忽略版本更新
    .gitignore文件
    ##注释
    \转义
    空行作为分隔符
    /分隔目录 /ax匹配.gitignore所在目录下的ax ax代表所有、
    /在末尾代表是个目录
    !重新包含 但是父目录被ignore了就没用
    a[mn]z 匹配amz 和 anz 只能取一个
    ** 匹配多级目录  a/**/b a/x/b  a/x/y/b 等
例如：
    所有文件 *
    所有目录 /*
    a目录  但除了a下的b
    a/*
    !a/b
    只保留a目录下的a{一个}z.后缀
    a/*
    !a/a?z.*
    查看规则是否生效：
    git check-ignore filename 如果有输出则表示被忽略
    git check-ignore -v filename 详细查看是哪一条规则忽略
    .ignore 只能忽略那些没有被追踪的文件纳入版本库无效
    解决方法：
    先删除本地缓存再加入
    git rm -f --cached
    git add .
    git status
已忽略无法添加到版本库
先删除规则


#恢复
1.未add
    git checkout {路径} git checkout a.txt (这种情况修改了也能还原) 原理是从暂存区恢复到工作区
2.已add 未 commit  3.已commit 恢复版本
    git checkout id {路径} git checkout 332422200839 a.txt 原理是从版本库 同理可以退回版本
    git checkout id {路径} 

#关联远程库 git remote 
    git remote add originI(远程库名) https://github.com/tayueliuhen/linkTwo.git
    git push -u(本地分支上传并合并到远程分支) origin(远程库名) dev(本地分支) 
可以简写为git push 而且之后分支变成dev(默认分支) 从本地来
第2小步gitee
    同样的git remote add origin https://github.com/tayueliuhen/linkTwo.git(提示已存在)
    因为之前关联了相同名字的github库
    git remote add gitee(new name) https://github.com/tayueliuhen/linkTwo.git
    git remote -h  查看帮助信息

git remote -v 详细
git remote show 简略到只有名称
git rename oldname newname
git remote remove 移除远程库

#push冲突与解决方法
1.git pull
2.git diff 查看修改内容 或者手动查看然后沟通修改再 git pull 然后push就可以了

#commit提交修正(log中使用new commit覆盖 old commit)
修改后 git commit -m "first 修改" 发现错误
    1. 此时当然可以修改后重新提交 (但是) 副作用 多了一条日志  
    2. git commit --amend -m "xxx" 相当于是对上一次的提交做了一次重写
修改了多个文件但是有忘记add的 但是提交了
    1. 当然也可以 但也会多一条日志 
    2. git commit --amend -m "xxx" 此时日志项是xxx
日志信息写错了
    git commit -amend -m "xxx"
长开发周期 不想要小提交
    git commit -amend -m "xxx"

#日志
    ##优化 {
        #条数
        git log -n   git log -2 显示最近2条
        #一行
        git log --oneline
        #图表显示
        git log --graph
    }
    ##统计输出{
        git log --stat 是输出更加详细(修改添加了几处)
        git log --patch 缩写为 -p 和diff相像 具体哪里修改了 {
            --- 修改前
            +++ 修改后
            diff 的查看
        }
    }
    ##高级用法 
    按时间
    git log --after="2023-01-01" (不包含) 
    git log --befor="2023-01-01" (包含)    --before=today (= git log)
    git log --before="2023-01-09" --after="2023-01-01" 1-8号   ###组合使用
    ##或者是  {
       #按时间 {
            30 day ago
            4 week ago
            1 month ago
        }
        #按作者 {
            --author = "chidanta"
            --author = "@qq.com"
        }
        #按提交信息 {
            --grep = "重要更新"
        }
    }
    #reflog 本地默认保存90天 只保存在本地
    amend 具体 (最后一根救命稻草)

#修改远程分支  
git branch -a 可以查看所有分支  本地+远程
    推送所有本地分支到远程库 git push origin(远程库名) --all
    推送单个或者多个        git push origin branch_a branch_b
    设置默认分支  进入github后台
    #删除分支  默认分支不可删
    1.github后台删除但是会导致本地缓存的远程分支和实际不同看,此时需要同步
      git remote prune {远程库名称}
    2. git 客户端
    git push {远程库名} -d 分支名  git push origin -d master
    
#标签  (commit的别名) 
    ##打标签
    1.git tag v1.8 (内容少，简单称为轻量级标签)
    2.git tag v1.0 id (追加标签)
    3.git tag v0.0 -a -m "注释" id (注释标签)    -a annotate 注释的意思 -m指定注释
    ##查看标签
    git tag (直接列出标签) 
    git tag -l 模式匹配  git tag -l "v1*"
    git show v1.0 (显示标签详细信息) 轻量级标签就没有注释信息
    ##推送本地标签到远程库
    git push origin(远程库名) v1.0 v2.0
    git push origin(远程库) --tags 所有的标签
    ##删除标签
        ###本地
        git tag -d v1.0
        ###远程库
        git push origin(远程库名) -d v1.0
##发行 直接后台发布就行
fork pr

#ssh密钥配置
ssh-keygen 或者 ssh-keygen -t rsa(指定算法) -C(注释) "xxxxx@xxxxx.com"  
cat ~/.ssh/id_rsa.pub
ssh -T git@github.com 查看是否可连接

有时ssh错误解决  no hostkeys available
ssh-keygen -A -f ~/.ssh/known_hosts